package com.yc.sole.framework.redis;


import com.yc.sole.framework.redis.enums.CacheTime;

import java.lang.annotation.*;

/**
 * 开启缓存注解 hash类型存储
 *
 * @author yizuomin
 * @date 2023/2/28 15:46
 **/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisCache {

    /**
     * hash缓存前缀 必填
     * 例如：
     * CacheKeyConstant.SYSTEM_USER_CACHE_KEY
     *
     * @return
     */
    String prefix();

    /**
     * hash缓存map的key 使用spel表达式 例如
     * **
     * **  @EnableCache(value=CacheKeyConstant.SYSTEM_USER_CACHE_KEY,key="#userId")
     * **  public UserDTO getUserById(String userId){
     * **
     * **   }
     * **
     * 或
     * <p>
     * **   p代表params参数，0代表方法入参下标
     * **   @EnableCache(value=CacheKeyConstant.SYSTEM_USER_CACHE_KEY,key="#p0")
     * **   public UserDTO getUserById(String userId){
     * *
     * *    }
     * **
     * **
     */
    String key();

    /**
     * 缓存时间。默认1天
     *
     * @return
     */
    CacheTime expireTime() default CacheTime.ONE_DAY;

    /**
     * 是否删除缓存，用于修改和删除方法
     * true：方法结束会删除原来的缓存
     * false：方法结束缓存不会修改
     *
     * @return
     */
    boolean remove() default false;
}
